home *** CD-ROM | disk | FTP | other *** search
-
- /* Copyright (c) CNIDR (see file COPYRIGHT, included in this distribution) */
-
- /* config.c:
- * creates a header file with details on a machine's representation of
- * numbers, alignment requirements, etc, etc.
- */
-
- #ifdef WIN32
- #include <process.h>
- #endif
-
- #include <stdio.h>
-
- #define SHORT_CODE 0
- #define INT_CODE 1
- #define LONG_CODE 2
- #define CHAR_CODE 3
-
- typedef struct _short_test {
- char c;
- unsigned short s;
- } short_test;
-
- typedef struct _long_test {
- char c;
- unsigned long l;
- } long_test;
-
- typedef struct _int_test {
- char c;
- unsigned int i;
- } int_test;
-
- #ifdef WIN32
- void main()
- #else
- int main()
- #endif
- {
-
- short_test st;
- long_test lt;
- int_test it;
-
- int four_byte;
- int two_byte;
- int one_byte;
- #ifdef WIN32
- unsigned long l;
- unsigned char *cp;
- #else
- unsigned int i,*ip;
- unsigned long l,*lp;
- unsigned short s,*sp;
- char c;
- unsigned char *cp;
- #endif
-
-
- if(sizeof(char) == 1) {
- printf("#define ONE_BYTE char\n");
- one_byte = CHAR_CODE;
- } else {
- fprintf(stderr,
- "Error: chars are %d bytes long. Can't define ONE_BYTE\n",sizeof(char));
- exit(1);
- }
-
- if(sizeof(int) == 2) {
- printf("#define TWO_BYTE int\n");
- two_byte = INT_CODE;
- } else {
- if(sizeof(short) == 2) {
- printf("#define TWO_BYTE short\n");
- two_byte = SHORT_CODE;
- } else {
- fprintf(stderr,"Error: don't know how to define TWO_BYTE\n");
- exit(1);
- }
- }
-
- if(sizeof(int) == 4) {
- printf("#define FOUR_BYTE int\n");
- four_byte = INT_CODE;
- } else {
- if(sizeof(long) == 4) {
- printf("#define FOUR_BYTE long\n");
- four_byte = LONG_CODE;
- } else {
- fprintf(stderr,"Error: don't know how to define FOUR_BYTE\n");
- }
- }
-
-
- if(two_byte == SHORT_CODE) {
- printf("#define TWO_BYTE_ALIGN %d\n",(int)(&st.s)-(int)(&st.c));
- } else {
- if (two_byte == INT_CODE) {
- printf("#define TWO_BYTE_ALIGN %d\n",(int)(&it.i)-(int)(&it.c));
- }
- }
- if(four_byte == INT_CODE) {
- printf("#define FOUR_BYTE_ALIGN %d\n",(int)(&it.i)-(int)(&it.c));
- } else {
- if(four_byte == LONG_CODE) {
- printf("#define FOUR_BYTE_ALIGN %d\n",(int)(<.l)-(int)(<.c));
- }
- }
-
- l=0xdeadbeef;
-
-
- cp=(unsigned char*)&l;
-
- if(*cp == 0xde) {
- printf("#define BIG_ENDIAN\n");
- } else {
- if(*cp == 0xef) {
- printf("#define LITTLE_ENDIAN\n");
- } else {
- fprintf(stderr,"Error: can't find out byte order\n");
- exit(1);
- }
- }
- exit(0);
- }
-
-